package com.jiangyg.mall.admin.service;

import com.jiangyg.mall.admin.dto.UserDTO;
import com.jiangyg.mall.admin.dto.UserResourceDTO;
import com.jiangyg.mall.admin.vo.UserAuthzInfoVO;
import com.jiangyg.mall.admin.vo.UserVO;
import com.jiangyg.mall.core.support.restful.Pagination;

import java.util.List;

/**
 * 类描述：用户管理接口
 *
 * @author jiangyg
 * @version 2.0
 * @date 2020-07-12
 */
public interface UserService {

    /**
     * 功能描述：用户信息分页查询
     *
     * @param pagination 分页参数
     * @param simple     是否简单查询（简单查询不查询部门和角色信息）
     * @return 返回分页信息
     * @throws Exception 异常
     */
    Pagination<UserVO> selectPagination(Pagination<UserVO> pagination, boolean simple) throws Exception;

    /**
     * 功能描述：保存或者修改用户信息
     *
     * @param dto 用户信息
     * @return 返回是否操作成功 boolean
     * @throws Exception 异常
     */
    boolean saveOrUpdate(UserDTO dto) throws Exception;

    /**
     * 功能描述：保存用户资源关系
     *
     * @param userResourceDTO 用户资源关系
     * @return 是否成功
     */
    boolean savePermission(UserResourceDTO userResourceDTO);

    /**
     * 功能描述：根据ID获取用户信息
     *
     * @param userId 用户ID
     * @return 返回用户信息
     */
    UserDTO selectById(Long userId);

    /**
     * 功能描述：根据用户ID查询所有的角色ID
     *
     * @param userId 用户ID
     * @return 角色ID集合
     */
    List<String> selectRoleIdsById(Long userId);

    /**
     * 功能描述：批量删除用户信息
     *
     * @param userIds 要删除的用户ID数组
     * @return 返回是否操作成功 boolean
     */
    boolean delete(List<Long> userIds);

    /**
     * 功能描述：根据账户（用户名、手机号）查询用户认证信息
     *
     * @param account 账户（用户名、手机号）
     * @return 结果
     */
    UserAuthzInfoVO selectAuthzInfoByAccount(String account) throws Exception;

}
